/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package src.j2ee.compumake.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import src.j2ee.compumake.dominio.ComponentePedido;
import src.j2ee.compumake.dominio.Pedido;
import src.j2ee.compumake.dominio.Producto;
import src.j2ee.compumake.dominio.Sucursal;

/************************************************************************
 **                                                                    **
 ** Nombre: DAOComponentePedido.java                                               **
 ** Version: v1.0.0                                                    **
 ** Autor: amado.cante                                                 **
 ** Creado: 27/05/2013                                                 **
 ** Modificado:                                                        **
 ** Diagrama:                                                          **
 ** Caso de uso:                                                       **
 **                                                                    **
 ***********************************************************************/
public class DAOComponentePedido {
    private static final String TABLA_COMPONENTES = "ComponentesPedido";
    private static final String ID_PEDIDO = "idPedido";
    private static final String ID_PRODUCTO = "idProducto";
    private static final String ID_SUCURSAL = "idSucursalOrigen";
    private Connection conexion;
    private AccesoBaseDatos acceso = new AccesoBaseDatos();
    
    public DAOComponentePedido(){
        this.conexion = this.acceso.abrirConexion();
    }
    
    public ArrayList<ComponentePedido> registrarComponentes(Pedido pedido){
        ArrayList<ComponentePedido> componentes = pedido.getComponentes();
        ArrayList<ComponentePedido> componentesRegistrados = new ArrayList<>();
        for(int i=0;i<componentes.size();i++){
            ComponentePedido componente = this.registrarComponentePedido(componentes.get(i), pedido.getIdPedido(), pedido.getSucursalEntrega());
            if(componente!=null){
                componentesRegistrados.add(componente);
            }
        }
        return componentesRegistrados;
    }
    
    private ComponentePedido registrarComponentePedido(ComponentePedido componente, int idPedido, Sucursal sucursalEntrega){
        ComponentePedido componenteRegistrado = componente;
        DAOProducto daoProducto = new DAOProducto();
        int idProducto = daoProducto.buscaClaveProducto(componente.getProducto());
        int idSucursal=sucursalEntrega.getClaveSucursal();
        Sucursal sucursalOrigen = sucursalEntrega;
        if(daoProducto.obtenerExistenciaProductoSucursal(idProducto, sucursalEntrega.getClaveSucursal())>0){
            idSucursal = sucursalEntrega.getClaveSucursal();
            sucursalOrigen = sucursalEntrega;
        }else{
            DAOSucursal daoSucursal = new DAOSucursal();
            ArrayList<Sucursal> sucursales = daoSucursal.listarSucursales();
            boolean sigue = true;
            for(int i=0;i<sucursales.size() && sigue;i++){
                if(daoProducto.obtenerExistenciaProductoSucursal(idProducto, sucursales.get(i).getClaveSucursal())>0){
                    idSucursal = sucursales.get(i).getClaveSucursal();
                    sucursalOrigen = sucursales.get(i);
                    sigue = false;
                }
            }
        }
        try{
            String query = "INSER INTO "+TABLA_COMPONENTES+" ("+ID_PRODUCTO+","
                    +ID_PEDIDO+","+ID_SUCURSAL+") VALUES('"+idProducto+"','"
                    +idPedido+"','"+idSucursal+"');";
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            int afectados = sentencia.executeUpdate(query);
            if(afectados>0){
                componenteRegistrado.setSucursalOrigen(sucursalOrigen);
            }
            return componenteRegistrado;
        }catch(SQLException ex){
            return null;
        }        
    }
}
